/// ShaderFactory.h
/// Matthew DiBernardo (Cryptex)
/// 07.28.09
///
/// Defines the ShaderFactory class, which is desiged to load
/// Shaders from shader-headers [.sh]. Due to the constraints
/// of CgFX, this class should persist as long as the shaders
/// it creates are intended to exist.

#ifndef _SHADERFACTORY_H_
#define _SHADERFACTORY_H_

#include <string>
#include <glee.h>
#include <Cg/Cg.h>
#include <Cg/CgGL.h>
#include "Shader.h"

 

class ShaderFactory
{
private:
	CGcontext cgContext;
public:
	~ShaderFactory(void) { Shutdown(); }

	// Initialize()
	// -- Initializes the ShaderFactory
	void Initialize(void);

	// Shutdown()
	// -- Shutdown the ShaderFactory
	void Shutdown(void);
	
	// EnableCGProfiles()
	// -- Initializes the openGL renderstate to use the default CG Profiles
	void EnableCGProfiles(void);

	// DisableCGProfiles()
	// -- Disables the CG Profiles in the renderstate.
	// -- Use this to disable 
	void DisableCGProfiles(void);

	// LoadShader()
	// -- Creates a new shader from a shader header.
	// Input: fileName - The shader header to load.
	// Returns: A pointer to the new shader.
	Shader* LoadShader(const std::string fileName);	
};

#endif